package main

import (
	"fmt"
	"os"
	"runtime"
	"syscall"
	"time"
)

var n int
var nums [10]int

func main() {
	fmt.Scanln(&n)
	dfs_nobt(0, 1, 1)
}

func dfs_nobt(sum, index, start int) {
	var nforks = 0
	for i := start; i <= n-1; i++ {
		if sum+i > n {
			return
		}
		if sum+i == n {
			for j := 1; j <= index-1; j++ {
				fmt.Printf("%d+", nums[j])
			}
			fmt.Println(i)
			return
		}
		if runtime.GOOS == `linux` { // 不同系统 fork 有点不一样
			pid, _, _ := syscall.Syscall(syscall.SYS_FORK, 0, 0, 0)
			if pid == 0 { // 子进程
				nums[index] = i
				dfs_nobt(sum+i, index+1, i)
				os.Exit(0) // 查找结束后就退出
			} else { // 父进程
				nforks++                             // fork 的子进程数加一
				syscall.Wait4(int(pid), nil, 0, nil) // 等待子进程退出
				nforks--
			}
		} else if runtime.GOOS == `darwin` {
			pid, flag, _ := syscall.Syscall(syscall.SYS_FORK, 0, 0, 0)
			if flag == 1 { // 子进程
				nums[index] = i
				dfs_nobt(sum+i, index+1, i)
				os.Exit(0) // 查找结束后就退出
			} else { // 父进程
				nforks++                             // fork 的子进程数加一
				syscall.Wait4(int(pid), nil, 0, nil) // 等待子进程退出
				nforks--
			}
		}
	}
	for nforks > 0 { // 等待所有子进程退出
		time.Sleep(time.Millisecond)
	}
}

func dfs(sum, index, start int) {
	for i := start; i <= n-1; i++ {
		if sum+i > n {
			return
		}
		if sum+i == n {
			for j := 1; j <= index-1; j++ {
				fmt.Printf("%d+", nums[j])
			}
			fmt.Println(i)
			return
		}
		nums[index] = i
		dfs(sum+i, index+1, i)
		nums[index] = 0
	}
}
